Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2016, 22:28
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 789

Синхронизция двух запросов.
Здравствуйте.Есть форма с несколькими селектами.Для краткости пример на двух. В которые аяксом подгружается список в опшен.Список второго зависит от первого.Те. выбираю в первом ауди, отправляю на сервер,там обрабатывается и возвращает список моделей. Для уменьшения кол-ва запросов назначены переменные которые запоминают выбор.
Вот код
$(function() {

var url = "/modules/mod_search_auto/ajax.php";
var cache ={};
var cache1 ={};

$('select[name="mark"]').change(function() {

    var index = $(this)[0].selectedIndex;
    var mark = this.options[index].text;
    var data = 'marka_id=' + this.value+'&mark='+mark; 
	alert(data) // marka_id=1002&mark=Aston Martin
	if(cache[index]){
	$('#bod').html(cache[index]);
	}else{
         $.ajax({
              type:"POST",
              url:url,
              data: data,
              success:function(response){         
              $('#brn').html(response);
			  cache[index] = response;	
alert(response)// <option id='Vulcan' value='1002' >Vulcan</option><option id='Rapide S' value='1002' >Rapide S</option>
    }
    })
    }		 
    })
	

	$('select[name="brend"]').change(function() {
	
    var index = $(this)[0].options.selectedIndex;
    var brend = this.options[index].text;
    var data = 'brend_id=' + this.value+'&brend='+brend;
	alert(data) // brend_id=1002&brend=Rapide S
	if(cache1[index]){
	$('#bod').html(cache1[index]);
	}else{		
         $.ajax({
              type:"POST",
              url:url,
              data: data,
              success:function(response){                            
              $('#bod').html(response);
			  cache1[index] = response;
alert(response) // <option id='Седан'  value='1002' >Седан</option><option id='купе'  value='1002' >купе</option>
    }
    })
	}
    })
	
});


Теперь получается, что если я выбрал Ауди модель А5, а потом передумал и выбрал Опель,то модели так и остались от Ауди, потому как запрос не ушёл.
Можно ли запоминать как то в связке, что ли.Марка-модели.
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2016, 01:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Хорошо, пусть выбрали бренд, затем модель, а если у модели выбирать объем двигателя, и т.д, и т.д, то придется на каждый чих порождать свой метод $.ajax? Посмотрите на свои запросы, они отличаются только набором параметров, а значит метод должен быть один.

Сообщение от ureech
Теперь получается, что если я выбрал Ауди модель А5, а потом передумал и выбрал Опель,то модели так и остались от Ауди, потому как запрос не ушёл.
Вряд ли браузер медленнее вас думает, чем вы передумываете. А кеш ваш оправдан только в том случае, если ваши данные практически статичны, иначе это зло.
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2016, 07:59
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
Распишите поподробнее логику выбора , а то не совсем понятно
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2016, 10:16
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
Если у вас иерархическая система селектов, то никакой кеш вам не нужен.
Здесь возможны два варианта:
1. Грузятся сразу все селекты, организованные в структуру дерева. В соответствии с выбором в верхних уровнях показываются-скрываются селекты соответствующих ветвей по мере их выбора.
2. По выбору в селекте верхнего уровня грузится селект следующего уровня, удаляются все селекты нижележащих уровней. И т.д. по нижеследующим уровням.
Первый вариант не требует повторных загрузок. Такое возможно при достаточно редких обновлениях данных в БД. Достаточно сложен в реализации.
Второй вариант гораздо проще реализуется и обновляется при обновлении в базе.
Ответить с цитированием
  #5 (permalink)  
Старый 31.03.2016, 12:33
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 789

Сообщение от Dilettante_Pro
2. По выбору в селекте верхнего уровня грузится селект следующего уровня, удаляются все селекты нижележащих уровней. И т.д. по нижеследующим уровням.
Сейчас у меня тоже самое, ели убрать кеш.
Сообщение от Dilettante_Pro
1. Грузятся сразу все селекты, организованные в структуру дерева. В соответствии с выбором в верхних уровнях показываются-скрываются селекты соответствующих ветвей по мере их выбора.
Это интересно.Структура на данный момент древовидная и вывести все в отдельные селекты не проблема, я думаю, это всё php, а вот потом показывать как пока не очень представляю.Положим я скрыл все опшены кроме верхнего селекта, где сами категории(марки авто).Каждой категории соответствует подкатегория(модель) связанная по id-category_id. Я выбираю опшен1 с id = 1 и у меня показывается опшен1 с category_id = 1 селекта2. А вот дальше... Тип кузова, мощность и тд поля таблицы модели и связаны они по названию модели. Значит value модели нужно её название и value кузова тоже, но что тогда для мощности?Хотя можно ограничится и кузовом для начала. В правильном ли направлениия рассуждаю?
Ответить с цитированием
  #6 (permalink)  
Старый 31.03.2016, 12:37
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
Самое то направление. Мощность, по идее, тоже должна лежать в дереве - у определенной модели определенный список мощностей.
А вообще-то вам виднее - смотрите, пробуйте.
Ответить с цитированием
  #7 (permalink)  
Старый 31.03.2016, 12:56
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 789

ОК,буду пытаться.
Ответить с цитированием
  #8 (permalink)  
Старый 31.03.2016, 13:31
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от ureech Посмотреть сообщение
ОК,буду пытаться.
А после этого можно будет вернуться к началу предыдущей темы и сделать универсальную процедуру загрузки
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2016, 12:01
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 789

Сообщение от Dilettante_Pro Посмотреть сообщение
А после этого можно будет вернуться к началу предыдущей темы и сделать универсальную процедуру загрузки
Это обязательно, а пока помогите тронуться с места.
Итак я вывел данные в опшен.
<form>
<select name="mark"   style="width:100%">
	<option value="all">Выбирите марку</option>
	{foreach key=tid item=item from=$auto}
	<option  class="mark" data-id="{$item.id}" value="{$item.title}" >{$item.title}</option>
	{/foreach}
</select>

<select name="brends" id="brn"  style="width:100%">
<option class="no-hide" selected="selected" value="mrk">Выбирите модель</option>
	{foreach key=tid item=item from=$items}
	<option  class="brend" data-id="{$item.cat_id}" value="{$item.model_car}" >{$item.model_car}</option>
	{/foreach}
</select>
</form>

В первом селекте:{$item.id} - id марки авто
{$item.title} - название

Во втором {$item.cat_id} - id категории модели авто, т.е. у {$item.title}:{$item.id}={$item.cat_id}
{$item.model_car} - название модели авто


$(function() {

$('.brend).css('display','none');

$('select[name="mark"]').change(function() {
    var index = this.options.selectedIndex;
	var data = this.value;
	var id_mark = this.options[index].getAttribute('data-id')
    })
	
$('select[name="brends"]').change(function() {
    var index = this.options.selectedIndex;
	var data = this.value;
	var id_brend = this.options[index].getAttribute('data-id')
    })
	
    })

Теперь понимаю, что надо как то сравнить id_mark с data-id класса class="brend", что бы отменить .css('display','none'), но не могу допетрить в какую сторону смотреть.

Последний раз редактировалось ureech, 01.04.2016 в 12:06.
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2016, 12:12
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
это у вас html такой?
Сообщение от ureech Посмотреть сообщение
Итак я вывел данные в опшен.
<form>
<select name="mark"   style="width:100%">
	<option value="all">Выбирите марку</option>
	{foreach key=tid item=item from=$auto}
	<option  class="mark" data-id="{$item.id}" value="{$item.title}" >{$item.title}</option>
	{/foreach}
</select>

<select name="brends" id="brn"  style="width:100%">
<option class="no-hide" selected="selected" value="mrk">Выбирите модель</option>
	{foreach key=tid item=item from=$items}
	<option  class="brend" data-id="{$item.cat_id}" value="{$item.model_car}" >{$item.model_car}</option>
	{/foreach}
</select>
</form>
Вы же не это грузите в html - дайте нормальный html, с которым будет работать JS. Зачем лишние головоломки с переменными PHP?
что бы отменить .css('display','none'), - вы что, поменяли технологию? Прогрузили сразу все? Тогда в селекты надо сразу закладывать древовидную структуру, например, через data-id опшена(прописать такой же в селект следующего уровня) чтобы не гадать - какого марка бренд

Последний раз редактировалось Dilettante_Pro, 01.04.2016 в 12:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выполнение двух асинхронных .load() -запросов, и перезагрузка страницы по завершении sanns AJAX и COMET 6 10.04.2015 03:41
Пересечение и разность двух массивов harold Общие вопросы Javascript 9 18.12.2013 21:41
Поиск и устранение причины странных запросов AndrewP Работа 2 29.11.2013 14:10
Очередь XML запросов Евгений М AJAX и COMET 4 01.02.2012 11:05
скрипт для двух html запросов sergsao Общие вопросы Javascript 3 29.11.2011 13:50